package com.ryder.petmatediarybackend.common.enums;

import lombok.Getter;

/**
 * 描述: 统一响应状态码枚举（遵循阿里规范）
 *
 * @author Ryder
 * @version 1.0
 * @since 1.0
 * 更新日期: 2025/10/28
 */
@Getter
public enum ResultCode {

    // ==================== 成功状态码 ====================
    /**
     * 成功
     */
    SUCCESS(200, "操作成功"),

    // ==================== 客户端错误（4xx）====================
    /**
     * 请求参数错误
     */
    BAD_REQUEST(400, "请求参数错误"),

    /**
     * 未授权（未登录或 Token 失效）
     */
    UNAUTHORIZED(401, "未授权，请先登录"),

    /**
     * 无权限访问
     */
    FORBIDDEN(403, "无权限访问"),

    /**
     * 资源不存在
     */
    NOT_FOUND(404, "资源不存在"),

    /**
     * 请求方法不支持
     */
    METHOD_NOT_ALLOWED(405, "请求方法不支持"),

    /**
     * 请求超时
     */
    REQUEST_TIMEOUT(408, "请求超时"),

    /**
     * 资源冲突（如用户名已存在）
     */
    CONFLICT(409, "资源冲突"),

    /**
     * 请求过于频繁
     */
    TOO_MANY_REQUESTS(429, "请求过于频繁，请稍后再试"),

    // ==================== 业务错误（自定义 4xx）====================
    /**
     * 业务异常（通用）
     */
    BUSINESS_ERROR(40000, "业务处理失败"),

    /**
     * 用户名已存在
     */
    USERNAME_EXISTS(40001, "用户名已存在"),

    /**
     * 用户不存在
     */
    USER_NOT_FOUND(40002, "用户不存在"),

    /**
     * 密码错误
     */
    PASSWORD_ERROR(40003, "密码错误"),

    /**
     * 账号已被禁用
     */
    ACCOUNT_DISABLED(40004, "账号已被禁用"),

    /**
     * Token 已失效
     */
    TOKEN_EXPIRED(40005, "Token 已失效，请重新登录"),

    /**
     * Token 在黑名单中
     */
    TOKEN_BLACKLISTED(40006, "Token 已失效，请重新登录"),

    /**
     * 验证码错误
     */
    CAPTCHA_ERROR(40007, "验证码错误"),

    /**
     * 角色不存在
     */
    ROLE_NOT_FOUND(40008, "角色不存在"),

    /**
     * 角色编码已存在
     */
    ROLE_CODE_EXISTS(40009, "角色编码已存在"),

    /**
     * 角色下还有用户，无法删除
     */
    ROLE_HAS_USERS(40010, "该角色下还有用户，无法删除"),

    /**
     * 权限不存在
     */
    PERMISSION_NOT_FOUND(40011, "权限不存在"),

    /**
     * 权限编码已存在
     */
    PERMISSION_CODE_EXISTS(40012, "权限编码已存在"),

    /**
     * 文件上传失败
     */
    FILE_UPLOAD_ERROR(40013, "文件上传失败"),

    /**
     * 文件类型不支持
     */
    FILE_TYPE_ERROR(40014, "文件类型不支持"),

    /**
     * 文件大小超限
     */
    FILE_SIZE_EXCEEDED(40015, "文件大小超限"),

    // ==================== 服务端错误（5xx）====================
    /**
     * 服务器内部错误
     */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),

    /**
     * 数据库操作失败
     */
    DATABASE_ERROR(50001, "数据库操作失败"),

    /**
     * Redis 操作失败
     */
    REDIS_ERROR(50002, "缓存操作失败"),

    /**
     * 第三方服务调用失败
     */
    THIRD_PARTY_ERROR(50003, "第三方服务调用失败"),

    /**
     * 服务不可用
     */
    SERVICE_UNAVAILABLE(503, "服务暂时不可用");

    /**
     * 状态码
     */
    private final Integer code;

    /**
     * 提示信息
     */
    private final String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}
